package com.zpark.jushanpay.common.util;

import org.apache.commons.lang.RandomStringUtils;
import org.apache.commons.lang.StringUtils;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.regex.Pattern;

/**
 * 支付工具类，提供支付订单校验和生成唯一订单号的功能。
 */
public class PaymentUtil {

    /**
     * 验证支付订单附加信息的正则表达式模式。
     * 该模式用于确保附加信息符合特定格式，以确保数据的有效性和一致性。
     */
    private static final Pattern pattern = Pattern.compile("SJPAY(,\\S+){4}");

    /**
     * 生成唯一支付订单号的前缀。
     * 该前缀用于标识支付订单号的来源或类型，增加了订单号的可读性和可追踪性。
     */
    private static final String SHANJUPAY_PREFIX = "SJ";

    /**
     * 校验支付订单的附加信息是否符合预期格式。
     *
     * @param attach 支付订单的附加信息字符串。
     * @return 如果附加信息符合预期格式，则返回true；否则返回false。
     */
    public static boolean checkPayOrderAttach(String attach) {
        if (StringUtils.isBlank(attach)) {
            return false;
        }
        return pattern.matcher(attach).matches();
    }

    /**
     * 生成唯一的支付订单号。
     *
     * @return 唯一的支付订单号字符串。
     */
    public static String genUniquePayOrderNo() {
        return SHANJUPAY_PREFIX + WorkId();
    }

    /**
     * 获取一个唯一的订单号ID。
     *
     * @return 唯一的订单号ID字符串。
     */
    public static String WorkId() {
        long id = IdWorkerUtils.getInstance().nextId();
        return String.valueOf(id);
    }

}

